package com.zzyl.common.utils;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.Period;

/**
 * 身份证工具类
 * 用于处理身份证号码相关操作，如提取年龄等
 */
public class IdCardUtil1 {

    /**
     * 根据身份证号码获取年龄
     * 
     * @param idCardNo 身份证号码（支持18位身份证）
     * @return 年龄
     * @throws IllegalArgumentException 当身份证号码格式不正确时抛出异常
     */
    public static int getAgeByIdCard(String idCardNo) {
        if (idCardNo == null || idCardNo.length() != 18) {
            throw new IllegalArgumentException("身份证号码格式不正确");
        }
        
        try {
            // 提取出生日期（第7位到第14位，索引6-13）
            String birthDateStr = idCardNo.substring(6, 14);
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
            LocalDate birthDate = LocalDate.parse(birthDateStr, formatter);
            
            // 计算年龄
            return Period.between(birthDate, LocalDate.now()).getYears();
        } catch (Exception e) {
            throw new IllegalArgumentException("身份证号码解析失败: " + e.getMessage());
        }
    }
    
    /**
     * 验证身份证号码格式是否正确（简单验证）
     * 
     * @param idCardNo 身份证号码
     * @return 是否有效
     */
    public static boolean isValidIdCard(String idCardNo) {
        if (idCardNo == null || idCardNo.length() != 18) {
            return false;
        }
        
        // 简单验证：前17位应为数字，最后一位可以是数字或X
        String pattern = "\\d{17}[\\dXx]";
        return idCardNo.matches(pattern);
    }
}
